package com.shizhefei.test.models.task;
import android.os.AsyncTask;
import android.os.Build;
import android.text.format.DateFormat;
import com.shizhefei.mvc.RequestHandle;
import com.shizhefei.mvc.ResponseSender;
import com.shizhefei.task.ICacheConfig;
import com.shizhefei.task.IAsyncTask;
import com.shizhefei.test.models.enties.MovieAmount;
import java.util.Random;
/**
* Created by LuckyJayce on 2016/7/20.
*/
public class MovieAmountTask2 implements IAsyncTask<MovieAmount> {
public String name;
public MovieAmountTask2(String name) {
this.name = name;
}
@Override
public RequestHandle execute(final ResponseSender<MovieAmount> sender) throws Exception {
final AsyncTask<Void, Void, Void> asyncTask = new AsyncTask<Void, Void, Void>() {
@Override
protected Void doInBackground(Void... params) {
try {
Thread.sleep(2000);
Random random = new Random();
int commentCount = random.nextInt(100);
int playCount = random.nextInt(1000) + 10;
long updateTime = System.currentTimeMillis();
sender.sendData(new MovieAmount(name, commentCount, playCount, name + " " + DateFormat.format("dd kk:mm:ss", updateTime)));
} catch (Exception e) {
e.printStackTrace();
sender.sendError(e);
}
return null;
}
};
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
asyncTask.executeOnExecutor(AsyncTask.THREAD_POOL_EXECUTOR);
} else {
asyncTask.execute();
}
return new RequestHandle() {
@Override
public void cancle() {
asyncTask.cancel(true);
}
@Override
public boolean isRunning() {
return false;
}
};
}
@Override
public String toString() {
return name;
}
public static class CacheConfig implements ICacheConfig<MovieAmount> {
//缓存过期时间
private int expirationTime;
public CacheConfig(int expirationTime) {
this.expirationTime = expirationTime;
}
@Override
public String getTaskKey(Object taskOrDataSource) {
MovieAmountTask2 task = (MovieAmountTask2) taskOrDataSource;
return new StringBuilder("MovieAmountTask2:").append(task.name).toString();
}
@Override
public boolean isUsefulCacheData(Object taskOrDataSource, long requestTime, long saveTime, MovieAmount o) {
long current = System.currentTimeMillis();
return current - saveTime < expirationTime;
}
@Override
public boolean isNeedSave(Object taskOrDataSource, long requestTime, long saveTime, MovieAmount o) {
return true;
}
}
}